import { prop_static_current_type } from '../../../Classes/cla_explore_for_diff';
import { key_ind_arr } from '../../../Types';
import { cur_compare_type } from '../Types';

const compare_linkObjTag = 'compare_linkObj';

/**
 * 对象类型 比对结果
 */
export class compare_linkObj {
  get [Symbol.toStringTag]() {
    return compare_linkObjTag;
  }

  constructor(current_type: string) {
    this[prop_static_current_type] = current_type;

    // 删除 隐藏项
    delete this.delete_part;
    delete this.increase_part;
    delete this.more_same_part;
    delete this.val_no_same_part;
  }

  [_: string]: string | key_ind_arr | cur_compare_type | undefined;

  /**
   * 当前 类型
   */
  [prop_static_current_type]: string;

  /**
   * 默认 集合
   */
  data: key_ind_arr = [];

  /**
   * 删除 集合
   */
  delete_part?: key_ind_arr;

  /**
   * 新增 集合
   */
  increase_part?: key_ind_arr;

  /**
   * 相似 集合
   */
  more_same_part?: key_ind_arr;

  /**
   * 类型 相同 但 所有 不相同 集合
   */
  val_no_same_part?: key_ind_arr;
}

export type compare_linkObj_data_or_delete_part =
  | 'data'
  | 'delete_part'
  | 'increase_part'
  | 'more_same_part'
  | 'val_no_same_part';
